/**
 * @ Author:Yoann Meclot. MSay2
 * @ Created on:2020-08-30 09:25:59
 * @ Modified on: 2021-06-14 18:41:20
 *
 * @version 1.4
 */
/**
 * Copyright (c) 2020-2021 MSay2 (Yoann Meclot) - @msay2/tspoet
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * The CodeBlock object allows to you write a coplexe code.
 *
 * @class `CodeBlock`
 * @version 1.3
 */
export declare class CodeBlock
{
    /**
     * Add a new code block.
     *
     * @type {CodeBlock.Builder}
     * @since 1.0
     */
    public static new():CodeBlock.Builder;

    static Builder:
    {
        new ():
        {
            /**
             * Add a code line.
             *
             * @param arg The code line to be added.
             * @param values The values to be cast with the 3 expressions.
             * @example $L, $S, $O, $I
             * @throws {TSPoetException} Check if the statement is undefined or null.
             * @throws {TSPoetException} Check if the values is undefined or null.
             * @type {CodeBlock.Builder}
             * @since 1.0
             */
            addStatement(arg:string, ...values:any[]):CodeBlock.Builder;

            /**
             * Add a new code block.
             *
             * @param codeBlock The new code block.
             * @throws {TSPoetException} Check if the code block is undefined or null.
             * @type {CodeBlock.Builder}
             * @since 1.0
             */
            addCodeBlock(codeBlock:CodeBlock):CodeBlock.Builder;

            /**
             * Add opening brace and the code line.
             *
             * @param arg The code line to be added.
             * @param values The values to be cast with the 3 expressions.
             * @example $L, $S, $O, $I
             * @throws {TSPoetException} Check if the values is undefined or null.
             * @type {CodeBlock.Builder}
             * @since 1.0
             */
            beginBrace(arg:string, ...values:any[]):CodeBlock.Builder;

            /**
             * Add opening and closing braces and the code line.
             *
             * @param arg The code line to be added.
             * @param values The values to be cast with the 3 expressions.
             * @example $L, $S, $O, $I
             * @throws {TSPoetException} Check if the values is undefined or null.
             * @type {CodeBlock.Builder}
             * @since 1.1
             */
            nextBrace(arg:string, ...values:any[]):CodeBlock.Builder;

            /**
             * Add closing brace.
             *
             * @param semicolon Insert a semicolon.
             * @type {CodeBlock.Builder}
             * @since 1.0
             */
            endBrace(semicolon:boolean):CodeBlock.Builder;

            /**
             * Add a new comment.
             *
             * @param arg Your comment.
             * @throws {TSPoetException} Check if the comment is undefined or null.
             * @type {CodeBlock.Builder}
             * @since 1.2
             */
            addComment(arg:string):CodeBlock.Builder;

            /**
             * Build a code block.
             *
             * @type {CodeBlock}
             * @since 1.0
             */
            build():CodeBlock;
        };
    };
}
export declare namespace CodeBlock
{
    type Builder = InstanceType<typeof CodeBlock.Builder>;
}
//# sourceMappingURL=CodeBlock.d.ts.map